package com.java.servlet.web.login.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.log4j.Logger;

import com.java.servlet.web.commons.GenericDao;
import com.java.servlet.web.conexion.PoolConnection;
import com.java.servlet.web.login.dao.sql.SqlLogin;
import com.java.servlet.web.login.vo.LoginVo;
import com.java.servlet.web.usuarios.vo.UsuariosVo;

public class LoginDaoImpl extends GenericDao implements LoginDao {
	private static final Logger log = Logger.getLogger(LoginDaoImpl.class);
	private Connection con = null;

	public LoginDaoImpl() {
		con = PoolConnection.getInstance().getConection();
	}

	@Override
	public boolean isEsisteUsuario(LoginVo loginVo) {
		boolean isExiste = false;
		int index = 1;
		PreparedStatement stm = null;
		ResultSet rs = null;
		try {
			stm = con.prepareStatement(SqlLogin.EXISTE_USUARIO);
			stm.setString(index++, loginVo.getUser());
			stm.setString(index++, loginVo.getPassword());
			rs = stm.executeQuery();
			if (rs.next()) {
				isExiste = rs.getInt(1) != 0;
			}
			log.info("EXISTE_USUARIO  [ " + SqlLogin.EXISTE_USUARIO);
		} catch (SQLException ex) {
			log.error("isEsisteUsuario  [ " + ex);
			PoolConnection.getInstance().closeConnection(con);
		} finally {
			 try {
	                rs.close();
	                stm.close();
	            } catch (SQLException e) {
	            	log.error("SQLException  [ " + e);
	            } 
		}
		return isExiste;
	}

	@Override
	public UsuariosVo datosUsuario(LoginVo loginVo) {
		int index = 1;
		PreparedStatement stm = null;
		ResultSet rs = null;
		UsuariosVo usuariosVo = null;
		try {
			stm = con.prepareStatement(SqlLogin.DATOS_USUARIO);
			stm.setString(index++, loginVo.getUser());
			stm.setString(index++, loginVo.getPassword());
			rs = stm.executeQuery();
			usuariosVo = getObjectDataResultSet(rs);
			log.info("DATOS_USUARIO  [ " + SqlLogin.DATOS_USUARIO);
		} catch (SQLException ex) {
			log.error("datosUsuario  [ " + ex);
			PoolConnection.getInstance().closeConnection(con);
		} finally {
			 try {
	                rs.close();
	                stm.close();
	            } catch (SQLException e) {
	            	log.error("SQLException  [ " + e);
	            }
		}
		return usuariosVo;
	}

	private UsuariosVo getObjectDataResultSet(ResultSet res) {
		UsuariosVo usuariosVo = null;
		try {
			if (res.next()) {
				usuariosVo = new UsuariosVo();
				usuariosVo.setNomUsuario(res.getString("NOM_USUARIO"));
				usuariosVo.setPatUsuario(res.getString("PAT_USUARIO"));
				usuariosVo.setMatUsuario(res.getString("MAT_USUARIO"));
				usuariosVo.setIdRol(res.getInt("ROL_USUARIO"));
				usuariosVo.setDescRol(res.getString("DESC_ROL"));
			}
		} catch (SQLException ex) {
			log.error("getObjectDataResultSet  [ " + ex);
		}
		return usuariosVo;
	}
}
